import originAxios from 'axios'
import qs from 'qs'

// 读取接口配置
import {API_BASE_URL} from "@/common/config";


// 官方文档 http://www.axios-js.com/zh-cn/docs/#%E6%8B%A6%E6%88%AA%E5%99%A8

export default function myAxios(option) {
  return new Promise((resolve, reject) => {
    // 1.创建axios的实例
    const instance = originAxios.create({
      // baseURL: 'http://123.207.32.32:8000',
      baseURL: API_BASE_URL,
      timeout: 8000
    });

    // 可修改一些默认配置
    instance.defaults.headers.common["token"] = "";
    instance.defaults.headers.post["Content-type"] = "application/json";


    // 配置请求和响应拦截
    // request拦截
    instance.interceptors.request.use(
      config => {
        console.log('来到了request拦截success中');
        // 1.当发送网络请求时, 在页面中添加一个loading组件, 作为动画

        // 2.某些请求要求用户必须登录, 判断用户是否有token, 如果没有token跳转到login页面

        // 3.对请求的参数进行序列化(看服务器是否需要序列化)
        // config.data = qs.stringify(config.data)
        // console.log(config);

        // 4.等等
        return config
      },
      err => {
        console.log('来到了request拦截failure中');
        return err;
      });

    // response拦截
    instance.interceptors.response.use(
      response => {
        console.log('来到了response拦截success中');
        return response.data
      },
      err => {
        console.log('来到了response拦截failure中');
        console.log(err);
        if (err && err.response) {
          switch (err.response.status) {
            case 400:
              err.message = '请求错误';
              break;
            case 401:
              err.message = '未授权的访问';
              break;
          }
        }
        return err
      });

    // 2.传入对象进行网络请求
    // 发送真正的网路请求
    instance(option).then(res => {
      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}
